﻿/*----------------------------------------------------------------
 * 版权所有 (c) 2025 HaiTangYunchi  保留所有权利
 * CLR版本：4.0.30319.42000
 * 公司名称：
 * 命名空间：SalaryCalculator.Views
 * 唯一标识：1a1de40c-a205-42d8-b18c-a9404001f1bd
 * 文件名：AddWorkRecordForm
 * 
 * 创建者：海棠云螭
 * 电子邮箱：haitangyunchi@126.com
 * 创建时间：2025/5/10 20:23:33
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SalaryCalculator
{
    public partial class AddWorkRecordForm : Form
    {
        private Employee _employee;

        public DateTime WorkDate { get; private set; }
        public TimeSpan StartTime { get; private set; }
        public TimeSpan EndTime { get; private set; }
        public int BreakMinutes { get; private set; }

        public AddWorkRecordForm(Employee employee)
        {
            InitializeComponent();
            _employee = employee;
            InitializeUI();
        }

        private void InitializeUI()
        {
            // 设置窗体标题
            this.Text = $"添加工作记录 - {_employee.Name}";

            // 初始化日期选择器
            dtpWorkDate.Value = DateTime.Today;

            // 初始化时间下拉框 (每15分钟一个选项)
            var timeSlots = new List<string>();
            for (int hour = 0; hour < 24; hour++)
            {
                for (int minute = 0; minute < 60; minute += 30)
                {
                    timeSlots.Add($"{hour:D2}:{minute:D2}");
                }
            }

            cmbStartTime.DataSource = new List<string>(timeSlots);
            cmbEndTime.DataSource = new List<string>(timeSlots);
            cmbStartTime.SelectedItem = "08:00";
            cmbEndTime.SelectedItem = "18:00";

            // 显示员工信息
            lblEmployeeInfo.Text = $"{_employee.Name} (¥{_employee.HourlyRate}/小时)";
            lblEmployeeInfo.ForeColor = Color.DarkBlue;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!ValidateInput())
                return;

            // 获取输入值
            WorkDate = dtpWorkDate.Value;
            StartTime = TimeSpan.Parse(cmbStartTime.SelectedItem.ToString());
            EndTime = TimeSpan.Parse(cmbEndTime.SelectedItem.ToString());
            BreakMinutes = int.Parse(txtBreakMinutes.Text);

            DialogResult = DialogResult.OK;
            Close();
        }

        private bool ValidateInput()
        {
            // 验证上班时间
            if (string.IsNullOrEmpty(cmbStartTime.Text))
            {
                MessageBox.Show("请选择上班时间", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmbStartTime.Focus();
                return false;
            }

            // 验证下班时间
            if (string.IsNullOrEmpty(cmbEndTime.Text))
            {
                MessageBox.Show("请选择下班时间", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmbEndTime.Focus();
                return false;
            }

            // 验证休息时间
            if (!int.TryParse(txtBreakMinutes.Text, out int breakMinutes) || breakMinutes < 0)
            {
                MessageBox.Show("请输入有效的休息分钟数", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtBreakMinutes.Focus();
                return false;
            }

            // 验证时间顺序
            TimeSpan start = TimeSpan.Parse(cmbStartTime.SelectedItem.ToString());
            TimeSpan end = TimeSpan.Parse(cmbEndTime.SelectedItem.ToString());

            if (end <= start)
            {
                MessageBox.Show("下班时间必须晚于上班时间", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            return true;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }
    }
}
